          SUBROUTINE (INIT.ROID,INIT.GEN,VIEW.ONLY)
** Version# 94.0001[8] - 11/19/2014 - 12:30pm - TSMITH - eclipse
*** V94.0001 Change - Custom Coding 14 - 11/19/2014 - TSMITH - eclipse

*** Subroutine : RENTAL.OE
*-------------------------------------------------------------------------*
*** This is the Rental Equivalent of Order Entry. In this screen, users
*** may setup rental agreements for customers, set check-out/check-in dates
*** and times, set branches, add rental products, etc.
*-------------------------------------------------------------------------*
*** Parameters:
*** INIT.ROID - Initial Rental Order ID                               (IN)
*** VIEW.ONLY - Indicates if the Rental Agreement is View Only        (IN)
*-------------------------------------------------------------------------*
*** Globals:
*** LED  - Rental Ledger
*** LD   - Rental Ledger Detail
*** CUS  - Bill-To Customer
*** CUSS - Ship-To Customer
*** PRD  - Product
*-------------------------------------------------------------------------*
          *** Check to see if user is allowed in Rental Agreements
          CHECK.KEY "RENTAL.ALLOWED",ROK
          IF NOT(ROK) THEN PRINT BELL:; RETURN

          SCREEN
RESTART:  CLEAR.SCREEN
          PRINT @(59,5):TIME.ZONE$ "L#3"
          PRINT @(75,5):TIME.ZONE$ "L#3"

          *** Skip display of reminder messages on initial display.
          SKIP.PRD.MSG = YES
          GOSUB INIT.ROE
          GOSUB REDISPLAY

          *** Log the Rental Agreement in the User History
          USER.LOG.HISTORY '9',ROID

          IF NOT(NEW.ORDER) THEN GOTO INBODY
          SKIP.PRD.MSG = NO

          *** Calculate the predefined times for the Check-Out and Check-In
          *** for rentals
          RENTAL.CALC.TIMES DATE.OUT,TIME.OUT,DATE.IN,TIME.IN
*-------------------------------------------------------------------------*
INDOUT:   *** Specify a Check-Out Date at the Ledger Level
          IF DATE.OUT # '' THEN
             LED(9)<1,GEN,1> = DATE.OUT
             PRINT @(33,17):OCONV(DATE.OUT,'D2/')
             GOTO INTOUT
          END
IN.DOUT:  INP DATE.OUT,33,17,8,'D2/'
          IF QUIT THEN GOTO EXIT.LNS
          IF DATE.OUT = '' THEN
             MSG = BELL:"Check Out Date is Required!"
             ERR.MESS 18,3,MSG
             GOTO IN.DOUT
          END
          IF CHANGED THEN
             IF DATE.OUT > LED(10)<1,GEN,1> AND LED(10)<1,GEN,1> # "" THEN
                DATE.OUT = LED(9)<1,GEN,1>
                GOSUB IN.OUT.ERR
                PRINT @(33,17):OCONV(DATE.OUT,'D2/')
                GOTO IN.DOUT
             END

             *** For Check-Out Date we allow non-Business day entries, but
             *** we will warn the user.
             CHK.DAY = DATE.OUT
             GOSUB WORKDAY
             IF NOT(IS.WDAY) THEN GOSUB WDAY.ERR
             LED(9)<1,GEN,1> = DATE.OUT
             RENTAL.CALC.TIMES DATE.OUT,,DATE.IN
          END
          ON MOVE+1 GOTO IN.DOUT, IN.DOUT, IN.DOUT
*-------------------------------------------------------------------------*
INTOUT:   *** Specify a Check-Out Time at the Ledger Level
          IF TIME.OUT # '' THEN
             LED(9)<1,GEN,2> = TIME.OUT
             PRINT @(42,17):OCONV(TIME.OUT,'MTH') "L#7"
             PRINT @(50,17):TIME.ZONE$            "L#3"
             GOTO INDIN
          END
IN.TOUT:  INP TIME.OUT,42,17,7,'MTH'
          IF QUIT THEN GOTO EXIT.LNS
          PRINT @(50,17):TIME.ZONE$ "L#3"
          IF CHANGED THEN
             IF DATE.OUT = LED(10)<1,GEN,1> AND TIME.OUT > LED(10)<1,GEN,2> AND LED(10)<1,GEN,2> # "" THEN
                TIME.OUT = LED(9)<1,GEN,2>
                GOSUB IN.OUT.ERR
                PRINT @(42,17):OCONV(TIME.OUT,'MTH') "L#7"
                PRINT @(50,17):TIME.ZONE$            "L#3"
                GOTO IN.DOUT
             END
             LED(9)<1,GEN,2> = TIME.OUT
             RENTAL.CALC.TIMES ,TIME.OUT,,TIME.IN
          END
          ON MOVE+1 GOTO IN.TOUT, IN.DOUT, IN.TOUT
*-------------------------------------------------------------------------*
INDIN:    *** Specify a Check-In Date at the Ledger Level
          IF DATE.IN # '' THEN
             LED(10)<1,GEN,1> = DATE.IN
             PRINT @(54,17):OCONV(DATE.IN,'D2/')
             GOTO INTIN
          END
IN.DIN:   INP DATE.IN,54,17,8,'D2/'
          IF (DATE.IN+0) = 0 THEN PRINT BELL:; GOTO IN.DIN
          IF QUIT THEN GOTO EXIT.LNS
          IF CHANGED THEN
*** Reject return dates earlier than check out date
             IF DATE.IN < LED(9)<1,GEN,1> THEN
                DATE.IN = LED(10)<1,GEN,1>
                GOSUB IN.OUT.ERR
                PRINT @(54,17):OCONV(DATE.IN,'D2/')
                GOTO IN.DIN
             END
             CHK.DAY = DATE.IN
             GOSUB WORKDAY
             IF NOT(IS.WDAY) THEN
                GOSUB WDAY.ERR
                DATE.IN = LED(10)<1,GEN,1>
                IF DATE.IN # '' THEN
                   PRINT @(54,17):OCONV(DATE.IN,'D2/')
                END ELSE
                   PRINT @(54,17):SPACE(8)
                END
                GOTO IN.DIN
             END
             LED(10)<1,GEN,1> = DATE.IN
          END
          ON MOVE+1 GOTO IN.DIN, IN.TOUT, IN.DIN
*-------------------------------------------------------------------------*
INTIN:    *** Specify a Check-In Time at the Ledger Level
          IF TIME.IN # '' THEN
             LED(10)<1,GEN,2> = TIME.IN
             PRINT @(63,17):OCONV(TIME.IN,'MTH') "L#7"
             PRINT @(71,17):TIME.ZONE$           "L#3"
             RENTAL.UPD.LED ROID,GEN
             GOTO INBODY
          END
IN.TIN:   INP TIME.IN,63,17,7,'MTH'
          IF (TIME.IN = '') THEN PRINT BELL:; GOTO IN.TIN
          IF QUIT THEN GOTO EXIT.LNS
          PRINT @(71,17):TIME.ZONE$ "L#3"
          IF CHANGED THEN
             *** Reject Return times earlier than check out times
             IF TIME.IN < LED(9)<1,GEN,2> AND LED(10)<1,GEN,1> = LED(9)<1,GEN,1> THEN
                TIME.IN = LED(10)<1,GEN,2>
                GOSUB IN.OUT.ERR
                PRINT @(63,17):OCONV(TIME.IN,'MTH') "L#7"
                PRINT @(71,17):TIME.ZONE$           "L#3"
                GOTO IN.TIN
             END
             LED(10)<1,GEN,2> = TIME.IN
          END
          ON MOVE+1 GOTO IN.TIN, IN.DIN, IN.TIN, IN.TIN
          RENTAL.UPD.LED ROID,GEN
*-------------------------------------------------------------------------*
INBODY:   ***
          COL=1; MOVE=0; LASTKEY=0; LAST.LINE=0; LDID=''; DLINE=1; LINE=1
*-------------------------------------------------------------------------*
MOVENEXT: *** Movement parsing.
          IF QUIT THEN GOTO EXIT.LNS
          GOSUB DISP.SS
          DOWNOK = LDID.LIST<1,LINE>#''
          LINES  = DCOUNT(LDID.LIST,VM)
          CLS = COLS
          BEGIN CASE
          *** Manually account for page up/down with display line
          *** Cross Reference
          CASE LASTKEY = 12
             DLINE -= 11; IF DLINE < 1   THEN DLINE = 1
             LINE   = DLINE.XREF<1,DLINE>
             IF LINE+0 = 0 THEN LINE = 1
          CASE LASTKEY = 14
             TST    = DCOUNT(DLINE.XREF,VM)
             DLINE += 11; IF DLINE>TST THEN DLINE=TST+1; LINE=LINES+1 ELSE
                LINE = DLINE.XREF<1,DLINE>
                END
             IF LINE = LAST.LINE AND LINE =< LINES THEN LINE += 1
          CASE OTHERWISE
             PARSEMOVE COL,LINE,CLS,LINES,11,DOWNOK,DOWNOK
          END CASE
          IF LAST.LINE # LINE THEN
             LAST.LINE = LINE
             GOSUB GET.LINE
             *** Account for comments and desc length on scrolling.
             DCT = DCOUNT(RDESC,VM)
             IF 16-VER < DCT THEN
                VSCROLL DCT - (16-VER)
             END
          END
          *** Verify that the item is a valid pn
          IF COL > 1 AND LDID.LIST<1,LINE> = "" THEN COL = 1
          IF COL > 1 AND NOT(NUM(LD(1))) THEN PRINT BELL:; COL = 1
          BEGIN CASE
          CASE VIEW = 1
             ON COL GOTO IN.PN,IN.PER,IN.RRATE,IN.CIDT,IN.CITM
          CASE VIEW = 3
             ON COL GOTO IN.PN,IN.PER,IN.RRATE,IN.CID2,IN.CIT2,IN.RSTAT
          CASE OTHERWISE
             ON COL GOTO IN.PN,IN.PER,IN.RRATE,IN.CID2,IN.CIT2
          END CASE
          PRINT BELL:; GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.PN:    INPV DESC,0,DLINE,31
          IF CHANGED AND BODY.VIEW.ONLY THEN
             IF LD(1)#'' THEN
                VPRINT 0,DLINE,PRD(1)<1,1>       "L#31"
             END ELSE
                VPRINT 0,DLINE,' '               "L#31"
             END
             GOTO IN.PN
          END
          IF NOT(CHANGED) AND (MOVE=1 OR MOVE=2) THEN GOTO MOVENEXT
          IF PN = '' THEN CHANGED = YES
          SV.CHANGED  = CHANGED
          OLD.LD1     = LD(1)
          QTY.CHNG.OK = YES
          IF NOT(QUIT) AND (CHANGED) THEN
             IF LD(1)#'' THEN
                INVN = LED(8)<1,GEN>
                ITEM.STAT = FIELD(LD(7)<1>,'~',1)
                IF ITEM.STAT = 'R' OR ITEM.STAT = "C" THEN
                   IF ITEM.STAT="R" THEN MSG = "Rented" ELSE MSG = "Closed"
                   MESS 5,3,BELL:"Cannot Change Item on a ":MSG:" Rental"
                   QTY.CHNG.OK = NO
                END
             END
             IF NOT(QTY.CHNG.OK) THEN GOSUB DISP.LN; GOTO IN.PN
             RENTAL.SELECT.PN ROID,GEN,VER,DESC,PN,LED(2)<1,GEN,2>
             GOSUB DISP.DATES
             IF PN = "" THEN
                IF LD(1)#'' THEN
                   VPRINT 0,DLINE,BELL:PRD(1)<1,1> "L#31"
                END ELSE PRINT BELL:
                GOTO IN.PN
             END
             GOSUB GET.PN
             IF ERR THEN PN=''; GOTO IN.PN
             OID.DATA$<3> = LDID
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.RRATE: INPV RRATE,35,DLINE,10,'R3',V_"S:VERF.RENTAL.RATE,":ROID:VM:GEN
          IF CHANGED THEN
             IF RRATE = "" THEN
*** Recalculate the rate for this item.
                LD(8)<1> = ""; LD(9)<1> = ""
                FORCE.FIND = YES
                GOSUB PRC.ITEM
             END ELSE
                IF NOT(HELP) THEN
*** Don't override the price if the rate was selected from the table
                   IF LD(9)<1> = "" THEN LD(9)<1> = LD(8)<1>
                END
                LD(8)<1> = ICONV(OCONV(RRATE,"MR3"),'MR9')
             END
             GOSUB UPD.LINE
             GOSUB DISP.LN
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.PER:   INPV RPERIOD,32,DLINE,2,V_"S:VERF.RENTAL.CODES,":ROID:VM:GEN
          IF CHANGED THEN
*** Default back to the qty entered and default calcs
             IF RPERIOD = "" THEN
                GOSUB CALC.RCD
             END ELSE
                LD(84) = RPERIOD
             END
             IF LD(9)<1> = "" THEN
                FORCE.FIND = NO
                GOSUB PRC.ITEM
             END
             GOSUB UPD.LINE
             GOSUB DISP.LN
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.CODT:  INPV LDT.OUT,47,DLINE,8,'D2/'
          IF CHANGED THEN
             IF LDT.OUT > LD(13)<1,1> THEN
                GOSUB IN.OUT.ERR
                GOSUB DISP.LN
                GOTO IN.DOUT
             END
             IF LDT.OUT < LD(14)<1,1> THEN
                CHK.DT = LDT.OUT:'.':LD(14)<1,2>
                RET.DT = ''
                GOSUB CHK.AVAIL
                IF NOT(AVAIL.OK) THEN
                   PROMPT     = "Item Not Available."
                   PROMPT<-1> = 'Overcommit (Y/N) ? '
                   ANS = 'N'
IN$$2:             INP.PROMPT ANS,PROMPT,'YN',1
                   IF NOT(ANS) THEN
                      GOSUB DISP.LN
                      GOTO IN.CODT
                   END
                END
             END
             LD(14)<1,1> = LDT.OUT
             IF NOT(LD(9)<1>) THEN
                LD(84) = ""
                FORCE.FIND = YES
                GOSUB PRC.ITEM
             END
             GOSUB UPD.LINE
             GOSUB DISP.LN
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.COTM:  INPV LTM.OUT,56,DLINE,6,'MTH'
          IF CHANGED THEN
             IF LD(13)<1,1> = LD(14)<1,1> AND LTM.OUT > LD(13)<1,1> THEN
                GOSUB IN.OUT.ERR
                GOSUB DISP.LN
                GOTO IN.DOUT
             END
             IF LDT.OUT = LD(14)<1,1> AND LTM.OUT < LD(14)<1,2> THEN
                CHK.DT = LD(14)<1,1> :'.':LD(14)<1,2>
                RET.DT = ''
                GOSUB CHK.AVAIL
                IF NOT(AVAIL.OK) THEN
                   PROMPT     = "Item Not Available."
                   PROMPT<-1> = 'Overcommit (Y/N) ? '
                   ANS = 'N'
IN$$7:             INP.PROMPT ANS,PROMPT,'YN',1
                   IF NOT(ANS) THEN
                      GOSUB DISP.LN
                      GOTO IN.COTM
                   END
                END
             END
             LD(14)<1,2> = LTM.OUT
             IF NOT(LD(9)<1>) THEN
                LD(84) = ""
                FORCE.FIND = YES
                GOSUB PRC.ITEM
             END
             GOSUB UPD.LINE
             GOSUB DISP.LN
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.CIDT:  INPV LDT.IN,63,DLINE,8,'D2/'
          IF CHANGED THEN
             IF LDT.IN < LD(14)<1,1> THEN
                GOSUB IN.OUT.ERR
                GOSUB DISP.LN
                GOTO IN.CIDT
             END
             CHK.DAY = LDT.IN
             GOSUB WORKDAY
             IF NOT(IS.WDAY) THEN
                GOSUB WDAY.ERR
                GOSUB DISP.LN
                GOTO IN.CIDT
             END
             IF LDT.IN > LD(13)<1,1> THEN
                CHK.DT = ''
                RET.DT = LDT.IN:'.':LD(13)<1,2>
                GOSUB CHK.AVAIL
                IF NOT(AVAIL.OK) THEN
                   PROMPT     = "Item Not Available."
                   PROMPT<-1> = 'Overcommit (Y/N) ? '
                   ANS = 'N'
IN$$8:             INP.PROMPT ANS,PROMPT,'YN',1
                   IF NOT(ANS) THEN
                      GOSUB DISP.LN
                      GOTO IN.CIDT
                   END
                END
             END
             LTM.IN = LD(13)<1,2>
             GOSUB CHK.GENS.CI
             IF NEW.GEN > 0 THEN
                TIME.MATCH = (LED(10)<1,GEN,2> = LED(10)<1,NEW.GEN,2>)
                STAT.MATCH = (LED(6)<1,GEN,2> = LED(6)<1,NEW.GEN,2>)
                IF (TIME.MATCH AND STAT.MATCH) THEN
                   GOSUB UPD.LD.GEN
                   RENTAL.UPD.LD  ROID,GEN,LDID
                   RENTAL.UPD.LED ROID,GEN
                END ELSE
                   GOTO NEW.DIGEN
                END
             END ELSE
NEW.DIGEN:      NEW.IN = LDT.IN:'~':LTM.IN
                NSTAT = LED(6)<1,CUR.GEN>
                OE.CREATE.NEW.GEN NEW.GEN,ROID,NSTAT,NEW.IN,LED(2)<1,CUR.GEN,2>,CUR.GEN
                LED(10)<1,NEW.GEN,1> = LDT.IN
                GOSUB UPD.LD.GEN
                RENTAL.UPD.LED ROID,CUR.GEN
             END
             IF NOT(LD(9)<1>) THEN
                LD(84) = ""
                FORCE.FIND = YES
                GOSUB PRC.ITEM
             END
             GOSUB UPD.LINE
             GOSUB DISP.LN
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.CITM:  INPV LTM.IN,72,DLINE,6,'MTH'
          IF CHANGED THEN
             IF LTM.IN < LD(14)<1,2> AND LDT.IN = LD(14)<1,1> THEN
                GOSUB IN.OUT.ERR
                GOSUB DISP.LN
                GOTO IN.CITM
             END
             IF LDT.IN = LD(13)<1,1> AND LTM.IN > LD(13)<1,2> THEN
                CHK.DT = ''
                RET.DT = LD(13)<1,1> : '.' : LTM.IN
                GOSUB CHK.AVAIL
                IF NOT(AVAIL.OK) THEN
                   PROMPT     = "Item Not Available ."
                   PROMPT<-1> = 'Overcommit (Y/N) ? '
                   ANS = 'N'
IN$$9:             INP.PROMPT ANS,PROMPT,'YN',1
                   IF NOT(ANS) THEN
                      GOSUB DISP.LN
                      GOTO IN.CITM
                   END
                END
             END
             LDT.IN = LD(13)<1,1>
             GOSUB CHK.GENS.CI
             IF NEW.GEN > 0 THEN
                DATE.MATCH = (LED(10)<1,GEN,1> = LED(10)<1,NEW.GEN,1>)
                STAT.MATCH = (LED(6)<1,GEN,2> = LED(6)<1,NEW.GEN,2>)
                IF (DATE.MATCH AND STAT.MATCH) THEN
                   GOSUB UPD.LD.GEN
                   RENTAL.UPD.LD  ROID,GEN,LDID
                   RENTAL.UPD.LED ROID,GEN
                END ELSE
                   GOTO NEW.TIGEN
                END
             END ELSE
NEW.TIGEN:      NEW.IN = LDT.IN:'~':LTM.IN
                NSTAT = LED(6)<1,GEN>
                OE.CREATE.NEW.GEN NEW.GEN,ROID,NSTAT,NEW.IN,LED(2)<1,GEN,2>,GEN
                LED(10)<1,NEW.GEN,2> = LTM.IN
                GOSUB UPD.LD.GEN
                RENTAL.UPD.LED ROID,GEN
             END
             IF NOT(LD(9)<1>) THEN
                LD(84) = ""
                FORCE.FIND = YES
                GOSUB PRC.ITEM
             END
             GOSUB UPD.LINE
             GOSUB DISP.LN
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.CID2:  INPV LDT.IN,47,DLINE,5,'D0/'
          IF CHANGED THEN
             IF LDT.IN < LD(14)<1,1> THEN
                GOSUB IN.OUT.ERR
                GOSUB DISP.LN
                GOTO IN.CIDT
             END
             IF LDT.IN > LD(13)<1,1> THEN
                CHK.DT = ''
                RET.DT = LDT.IN :'.':LD(13)<1,2>
                GOSUB CHK.AVAIL
                IF NOT(AVAIL.OK) THEN
                   PROMPT     = "Item Not Available ."
                   PROMPT<-1> = 'Overcommit (Y/N) ? '
                   ANS = 'N'
IN$$10:            INP.PROMPT ANS,PROMPT,'YN',1
                   IF NOT(ANS) THEN
                      GOSUB DISP.LN
                      GOTO IN.CIDT
                   END
                END
             END
             LD(13)<1,1> = LDT.IN
             IF NOT(LD(9)<1>) THEN
                FORCE.FIND = YES
                GOSUB PRC.ITEM
             END
             GOSUB UPD.LINE
             GOSUB DISP.LN
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.CIT2:  INPV LTM.IN,53,DLINE,5,'MT'
          IF CHANGED THEN
             IF LTM.IN < LD(14)<1,2> AND LDT.IN = LD(14)<1,1> THEN
                GOSUB IN.OUT.ERR
                GOSUB DISP.LN
                GOTO IN.CITM
             END
             IF LDT.IN = LD(13)<1,1> AND LTM.IN > LD(13)<1,2> THEN
                CHK.DT = ''
                RET.DT = LD(13)<1,1>:'.':LTM.IN
                GOSUB CHK.AVAIL
                IF NOT(AVAIL.OK) THEN
                   PROMPT     = "Item Not Available ."
                   PROMPT<-1> = 'Overcommit (Y/N) ? '
                   ANS = 'N'
IN$$11:            INP.PROMPT ANS,PROMPT,'YN',1
                   IF NOT(ANS) THEN
                      GOSUB DISP.LN
                      GOTO IN.CITM
                   END
                END
             END
             LD(13)<1,2> = LTM.IN
             IF NOT(LD(9)<1>) THEN
                FORCE.FIND = YES
                GOSUB PRC.ITEM
             END
             GOSUB UPD.LINE
             GOSUB DISP.LN
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
IN.RSTAT: *
          IF NUM(LD(46)) AND LD(46) # "" THEN
             RPOS = LD(46)
          END ELSE
             RPOS = 1
          END
          RSTAT.IN = RSTATS<1,RPOS>
IN$$6:    INPV RSTAT.IN,59,DLINE,19,V_'D:':RSTATS
          IF CHANGED THEN
             LOCATE RSTAT.IN IN RSTATS<1> SETTING POS THEN
                LD(46) = POS
             END
             GOSUB UPD.LINE
             GOSUB DISP.LN
          END
          GOTO MOVENEXT
*-------------------------------------------------------------------------*
CHK.GENS.CI: *
          GN.CT = DCOUNT(LED(10)<1>,VM)
          NEW.GEN = 0
          FOR GN = 1 TO GN.CT
             IF (LDT.IN=LED(10)<1,GN,1>) AND (LTM.IN=LED(10)<1,GN,2>) THEN
                NEW.GEN = GN
                EXIT
             END
          NEXT GN
          CUR.GEN = GEN
          FOR GN = 1 TO GN.CT
             IF LD(5)<1,GEN>+0 # 0 THEN
                CUR.GEN = GN
                EXIT
             END
          NEXT GN

          RETURN
*-------------------------------------------------------------------------*
UPD.LD.GEN: *
          OLD.GEN = GEN
          GN.CT = DCOUNT(LED(12)<1>,VM)
          FOR GN = 1 TO GN.CT
             IF LD(5)<1,GN>+0 # 0 THEN
                OLD.GEN = GN
                EXIT
             END
          NEXT GN
          LD(5)<1,OLD.GEN> = ''
          LD(5)<1,NEW.GEN> = -1
          LD(13) = LED(10)<1,NEW.GEN,1>:VM:LED(10)<1,NEW.GEN,2>
          RENTAL.UPD.LD ROID,CUR.GEN,LDID
          RETURN
*-------------------------------------------------------------------------
SUBS:     *ON OPTION GOTO HEADER, PRT.IT, DEPOSIT, COMMENT, STATUS, CHG.VIEW, INQS, INS.LINE, DEL.LINE, STATUS2
          ON OPTION GOTO COMMENT,CHG.VIEW,HEADER,SELL.STOCK,INQS,CLOSE.ITMS,CHG.DATE,CHG.MODE,DEPOSIT,INS.LINE,DEL.LINE
*-------------------------------------------------------------------------*
HEADER:   * Rental agreement header information
          RENTAL.OE.HEADER ROID,GEN,BODY.VIEW.ONLY,'Body'
          GOSUB DISP.IN.OUT
          GOSUB DISP.LNS
          RETURN
*-------------------------------------------------------------------------*
SELL.STOCK: *
          SELL.LDID.LIST = LED(49)<1>
          RENTAL.OE.SALES ROID,SELL.LDID.LIST,PN.LIST,QTY.LIST

          IF PN.LIST # '' THEN
             BEGIN CASE
             CASE PN.LIST = "~MAN~"
                ANS = "Y"
                PROMPT = "No Recommended Products Found. Create Sales Order (Y/N) ? "
IN$$3:          INP.PROMPT ANS,PROMPT,'YN',1
                PN.LIST = ""
             CASE PN.LIST = "~NOSEL~"
                ANS = "N"
                PROMPT = "No Recommended Products Selected. Create Sales Order (Y/N) ? "
IN$$4:          INP.PROMPT ANS,PROMPT,'YN',1
                PN.LIST = ""
             CASE OTHERWISE
                ANS = YES
             END CASE
             IF ANS THEN
                GOSUB CHK.SALES.ORDER
                IF NEW.OID # '' THEN
                   RENTAL.CREATE.SELLING ROID,GEN,NEW.OID,PN.LIST,QTY.LIST
                END
             END
          END
          RETURN
*-------------------------------------------------------------------------*
CHK.SALES.ORDER: *
          STK.LIST = ''

          GN.CT = DCOUNT(LED(123)<1>,VM)
          FOR GN = 1 TO GN.CT
             SOID = RAISE(LED(123)<1,GN>)
             IF SOID # '' THEN
                LOCATE SOID IN STK.LIST<1> SETTING POS ELSE
                   STK.LIST = INSERT(STK.LIST,1,POS;SOID)
                END
             END
          NEXT GN

          IF STK.LIST # '' THEN
             STK.LIST = INSERT(STK.LIST,1,1;'New Order')
             TITLE = 'Sales Order Selection'
             MENU.TABLE NEW.OID,,,1,7,21,,,STK.LIST,TITLE
             IF NEW.OID = 'New Order' THEN NEW.OID = 'NEW'
          END ELSE
             NEW.OID = 'NEW'
          END

          RETURN
*-------------------------------------------------------------------------*
DEPOSIT:  * Take a deposit on the rental agreement
          RENTAL.DEPOSIT ROID,GEN,VIEW.ONLY
          RETURN
*-------------------------------------------------------------------------*
CLOSE.ITMS: * Close Line Items
          IF LED(6)<1,GEN> # 'R' THEN
             ERR.MESS 5,5,'Must Be On A Rented GEN to Close Items'
          END ELSE
             GN.CT = DCOUNT(LED(48)<1>,VM)
             OPEN.LDID.LIST = ''
             FOR GN = 1 TO GN.CT
                IF LED(6)<1,GN> = 'R' THEN
                   OPEN.LDID.LIST<1,-1> = RAISE(LED(48)<1,GN>)
                END
             NEXT GN
             RENTAL.CLOSE.ITEMS ROID,GEN,OPEN.LDID.LIST,VIEW.ONLY
             IF TRIM(LED(48)<1,GEN>,SVM,'T') = '' THEN RETURN TO EXIT.LNS
             GOSUB REDISPLAY
             LINE = 1; MOVE = 0; LASTKEY = 0
          END
          RETURN
*-------------------------------------------------------------------------*
COMMENT:  * Add a comment to the rental agreement.
          IF LD(1)='S' THEN PRINT BELL:; RETURN
          VSCROLL.GET.VER LINE,VER
          IF LDID='' THEN MAT LD = ''
          OE.COMMENTS ROID,GEN,LDID,BODY.VIEW.ONLY
          IF F12 OR (LD(3)='' AND LDID='') THEN RETURN
          IF LDID='' THEN
             PN    = 'C'
             LD(1) = PN
             OE.NEW.LDID ROID,LDID,LDID.LIST,LINE
             LDID.LIST<1,LINE> = LDID
          END
          GOSUB UPD.LINE
          GOSUB DISP.LN
          QUIT = 0; COL = 1; MOVE = 4
          RETURN TO MOVENEXT
*-------------------------------------------------------------------------*
CHG.VIEW: * Change the current view
          OVIEW    = VIEW
          SF12     = F12
          SQUIT    = QUIT
          SEL.WORD = ""
          MENU.TABLE SEL.WORD,28,7,1,VCT,34,,,VIEW.OPTS,VTITLE,VIEW
          IF F12 THEN VIEW = OVIEW ELSE
             LOCATE SEL.WORD IN VIEW.OPTS<1> SETTING VIEW ELSE VIEW = 1
          END
          F12  = SF12
          QUIT = SQUIT
          IF VIEW # OVIEW THEN
             GOSUB DISP.VIEW
             BEGIN CASE
             CASE BODY.VIEW.ONLY;    COLS = 1
             CASE VIEW = 1;          COLS = 7
             CASE VIEW = 3;          COLS = 6
             CASE OTHERWISE;         COLS = 5
             END CASE
          END
          RETURN
*-------------------------------------------------------------------------*
CHG.DATE: *
          RENTAL.SELECT.CIDATE ROID,GEN
          GOSUB REDISPLAY
          LINE = 1; DLINE = 1; MOVE = 0; LASTKEY = 0; QUIT = 0
          RETURN TO MOVENEXT
*-------------------------------------------------------------------------*
CHG.MODE: *
          RENTAL.CHNG.MODE ROID,GEN,,VIEW.ONLY
          GOSUB REDISPLAY
          RETURN
*-------------------------------------------------------------------------*
INQS:     RENTAL.INQS ROID,GEN
          RETURN
*-------------------------------------------------------------------------*
INS.LINE: * Insert a line for a rental item.
          * Close any children windows so that they do not overwrite
          * any of the vscroll region.
          GOSUB CLOSE.DF
          IF E.MESS.<WINDOW.LEVEL> THEN
             WINDOW.CHILD.CLOSE
             E.MESS.<WINDOW.LEVEL> = ''
          END
          IF LINE>DCOUNT(LDID.LIST,VM) OR BODY.VIEW.ONLY THEN PRINT BELL:; RETURN

          OE.INS.LINE LDID.LIST,LINE,DLINE.XREF,DLINE

          GOSUB GET.LINE
          RETURN TO IN.PN
*-------------------------------------------------------------------------*
DEL.LINE: * Delete a rental item (set to 0 Ordered)
          IF LINE>DCOUNT(LDID.LIST,VM) OR BODY.VIEW.ONLY THEN PRINT BELL:; RETURN
          LDID.LIST    = DELETE(LDID.LIST,1,LINE)
          LD(4)        = 0
          LD(5)<1,GEN> = 0
          LOOP
          IF LINE#'' AND DLINE.XREF<1,DLINE>=LINE THEN
             VDEL DLINE
             DLINE.XREF = DELETE(DLINE.XREF,1,DLINE)
             END ELSE EXIT
          REPEAT

          CT  = DCOUNT(DLINE.XREF,VM)
          SLN = DLINE
          FOR J=DLINE TO CT; DLINE.XREF<1,J> = DLINE.XREF<1,J>-1; NEXT J
          GOSUB UPD.LINE
          IF LINE > DCOUNT(LDID.LIST<1>,VM) THEN
             LINE -= 1
             LAST.LINE = LINE
          END
          SLN = LINE
          GOSUB GET.LINE
          GOSUB DISP.LNS
          *** When deleting a line, only need to see if we need to un-do
          *** Sell Stock hotkey if it is already active.
          IF (SS.FLAG) THEN GOSUB EVAL.SS
          GOSUB DISP.SS
          LINE = SLN
          RETURN
*-------------------------------------------------------------------------*
INIT.ROE: *** Initialize All Varaibles
          ROID         = INIT.ROID
          GEN          = INIT.GEN
          IF GEN = '' THEN GEN = 1
          IF ROID = '' THEN VIEW.ONLY = NO
          VALID.ITEM   = NO; NEW.LN = NO;  MODE = "R"
          QSIGN        = -1; DLINE  = 1;   DLINE.XREF = ""
          ENT.MSG.ON   = NO
          DONT.FORGET  = NO
          LOCKED.LED   = NO
          CHK.DT       = ''
          RET.DT       = ''
          ST.CN        = ''
          BT.CN        = ''
          OE.OK        = YES
          FORCE.FIND   = YES
          SS.FLAG      = NO             ;* Sell Stock hotkey display flag.
          SV.SS.FLAG   = NO             ;* Saved State of hotkey display.

          READV DRET FROM CTRLFILE,"RENTAL.RETURN.STATUS",1 ELSE DRET = "In Stock"
          READV RSTATS FROM CTRLFILE,"RENTAL.PROD.STATUS",1 ELSE RSTATS = "In Stock"
          LOCATE DRET IN RSTATS<1> SETTING DFLT.RET ELSE DFLT.RET = 1

          READ RCODES FROM CTRLFILE,"RENTAL.CODES" ELSE RCODES = ""
          UM.TBL = RCODES<1>
          UM.QTY = RCODES<2>
          IF ROID THEN
             MATREAD LED FROM RLEDFILE,ROID ELSE RETURN TO RESTART
             BT.CN = LED(1)<1,GEN>; ST.CN = LED(5)<1,GEN>; PRC.BR = LED(2)<1,GEN,1>
          END ELSE
             GOSUB GET.BR
             IF SET.DONE THEN GOTO INIT.ERR

             BT.CN = ''; ST.CN = ''; ROID = ''
*** Select Customer (st/bt) to use
             RENTAL.SELECT.CUS PRC.BR,STK.BR,BT.CN,ST.CN,ROID,GEN
INIT.ERR:    IF QUIT THEN RETURN TO FINISH
          END
          GET.CUS PRC.BR,BT.CN,ST.CN,QSIGN

          OID.DATA$<1> = ROID
          OID.DATA$<2> = GEN

          GOSUB INIT.VARS
          GOSUB LOAD.HKEY

          IF NOT(VIEW.ONLY) AND MODE="R" THEN
             SOE.CHECK.NO.OE BT.CN,ST.CN,OE.OK,,,,"R"
             *** If the user is just trying to see an existing order, put
             *** them into view.only...  If trying to create, don't let
             *** it happen...
             IF NOT(OE.OK) THEN
                IF ROID = "NEW" THEN
                   GOTO RESTART
                END ELSE
                   VIEW.ONLY = YES
                   OE.OK = YES
                END
             END
          END ELSE
             OE.OK = YES
          END

          IF ROID = "NEW" THEN
             OE.NEW.LED MODE,PRC.BR,STK.BR,BT.CN,ST.CN,ROID,,,ABORT,NO,DATE()
             LED(9) = ''; LED(10) = '';LED(6) = 'B'
             IF ABORT THEN RETURN TO RESTART
             LOCKED.LED = YES
             LDID.LIST  = ''
             NEW.ORDER  = YES
          END ELSE
             IF ROID[1,1] # MODE THEN
                PRINT BELL:
                RETURN TO FINISH
             END
             GOSUB RECALLIT
             IF ABORT THEN RETURN TO RESTART
          END

          VSCROLL.DEFINE 1,1,6,78,10,"RENTAL.OE"
          VSCROLL.SET 1

          BEGIN CASE
          CASE BODY.VIEW.ONLY;    COLS = 1
          CASE VIEW # 1;          COLS = 5
          CASE OTHERWISE;         COLS = 7
          END CASE

          RETURN
*-------------------------------------------------------------------------*
EVAL.SS:  *** Evaluate if the Sell Stock hotkey should be lit.
          SELL.LDID.LIST = LED(49)<1>
          RENTAL.OE.SALES.GET ROID,SELL.LDID.LIST,,,,SELL.CT
          IF SELL.CT+0 > 0 THEN SS.FLAG = YES ELSE SS.FLAG = NO

          RETURN
*-------------------------------------------------------------------------*
GET.BR:   * Select the branch to use
          SET.DONE = NO
          GET.TTY PRC.BR,TTY.LOCA,TTY.SOURCE,TTY.SHIPVIA,TTY.RELOG

*** Find the terminals default branch.
          PRINT @(22,17):PRC.BR "L#4"

*** Select a branch if no default is set.
IN.BR:    IF PRC.BR='' THEN
IN.BRSEL:    INP PRC.BR,22,17,4
             IF NOT(QUIT) THEN
                VERIFY.BR PRC.BR,BNAME
                IF BNAME='' THEN PRINT BELL:; GOTO IN.BR
                PRINT @(22,17):PRC.BR "L#4"
             END ELSE
                SET.DONE = YES
             END
          END
          RETURN
*-------------------------------------------------------------------------*
LOAD.HKEY: * Load active hotkeys

          MENU.LOAD  2,19, 7, 1,'C'      ;* Comment
          MENU.LOAD 12,19, 4, 1,'V'      ;* View
          MENU.LOAD 19,19, 6, 1,'H'      ;* Header
          MENU.LOAD 28,19,10, 1,'S'      ;* Sell Stock
          MENU.LOAD 41,19, 3, 3,'Q'      ;* Inquries
          MENU.LOAD 47,19,11, 7,'I'      ;* Close Items
          MENU.LOAD 61,19,14,10,'D'      ;* Check-In Dates
          MENU.LOAD  2,21, 4, 1,'M'      ;* Mode
          MENU.LOAD  9,21, 7, 2,'E'      ;* Deposit
          MENU.LOAD ,,,,INSERT.KEY
          MENU.LOAD ,,,,DELETE.KEY

          RETURN
*-------------------------------------------------------------------------*
INIT.VARS:   * Initialize the needed variables
          TIME.IN  = LED(10)<1,GEN,2>
          TIME.OUT = LED(9)<1,GEN,2>
          DATE.IN  = LED(10)<1,GEN,1>
          DATE.OUT = LED(9)<1,GEN,1>
          SHP.BR   = LED(2)<1,GEN,2>
          FROM.QO  = NO
          NEW.ITEM = NO
          VIEW     = 1
          UPD.DATA = NO
          VTITLE   = "View Choices"

          GOSUB CHK.CLOSED
          GOSUB UPD.CHK.PRT

*** Setup view choices.

          VIEW.OPTS       = "Rental Rate / Check Out / Check In"
          VIEW.OPTS<1,-1> = "Rental Rate / Check In / Extension"
          VIEW.OPTS<1,-1> = "Rental Rate / Check In / Status"
          VCT = DCOUNT(VIEW.OPTS,VM)
          IF VCT > 10 THEN VCT = 10

          READV HRS.DAY FROM CTRLFILE,"RENTAL.HRS.DAY",1 ELSE HRS.DAY = 24

          RETURN
*-------------------------------------------------------------------------*
CHK.CLOSED: * Check to see if the current GEN is closed

          IF LED(8)<1,GEN> # '' THEN
             CLOSED.RENTAL = YES
          END ELSE
             CLOSED.RENTAL = NO
          END
          BODY.VIEW.ONLY = ((VIEW.ONLY) OR (CLOSED.RENTAL))

          RETURN
*-------------------------------------------------------------------------*
UPD.CHK.PRT: *
          CHKIN  = OCONV(LED(10)<1,GEN,1>,'D2/'):' ':OCONV(LED(10)<1,GEN,2>,'MTH')
          CHKOUT = OCONV(LED(9)<1,GEN,1>,'D2/'):' ':OCONV(LED(9)<1,GEN,2>,'MTH')

          RETURN
*-------------------------------------------------------------------------*
RECALLIT: * Setup all flags and ledger record needed
          LDID      = ''                ;* Initialize LDID for SET.DATA
          PN        = ''                ;* Initialize PN for SET.DATA
          NEW.ORDER = NO
          ABORT     = NO
          RENTAL.LOCK.LED ROID,LOCK.MSG
          IF LOCK.MSG THEN
             VIEW.ONLY = YES
          END ELSE
             LOCKED.LED = YES
          END
          GOSUB CHK.CLOSED

          RETURN
*-------------------------------------------------------------------------*
REDISPLAY: *
          GOSUB CHK.CLOSED
          VCLR 1
*-------------------------------------------------------------------------*
DISPLAY:  * Display order information on the screen
          GOSUB CLOSE.DF
          OE.DISP.BT.ST GEN
          IF BODY.VIEW.ONLY THEN
             PRINT @(1,0):BLINK$:"View Only":NORM$
          END ELSE
             PRINT @(1,0):""
          END

          BEGIN CASE
          CASE LED(6)<1,GEN> = 'B'
             ADDL.PRT = '-Bid'
          CASE LED(8)<1,GEN> # ''
             ADDL.PRT = '.':LED(8)<1,GEN> "R%3"
          CASE OTHERWISE
             ADDL.PRT = '    '
          END CASE

          IF LED(6)<1,GEN> = 'B' THEN
             PRINT @(1,17):TRIM(ROID):BLINK$:ADDL.PRT "L#4":NORM$
          END ELSE
             PRINT @(1,17):TRIM(ROID):ADDL.PRT "L#4"
          END
          PRINT @(17,17):LED(6)<1,GEN>
          PRINT @(22,17):LED(2)<1,GEN,1> "L#4"
          PRINT @(28,17):LED(2)<1,GEN,2> "L#4"
          GOSUB DISP.DATES

          GOSUB UPD.LD.LIST

          INIT.DISP = YES
          GOSUB DISP.LNS
          INIT.DISP = NO

          SOE.CREDIT.CHECK ST.CN,NO.OE,,,,,WARN.MSG,ROID,GEN
          IF WARN.MSG THEN
             MSG.LEN = LEN(WARN.MSG)
             REM.LEN = 40 - MSG.LEN
             PRINT @(38,21):BLINK$:WARN.MSG:SPACE(REM.LEN):NORM$
          END

          RETURN
*-------------------------------------------------------------------------*
UPD.LD.LIST: *
          IF LED(8)<1,GEN> = '' THEN
             LDID.LIST = LED(49)<1>
          END ELSE
             LDID.LIST = RAISE(LED(48)<1,GEN>)
          END

          RETURN
*-------------------------------------------------------------------------*
DISP.SS:  *** Highlight or un-highlight the 'Sell Stock' hotkey.
          IF SS.FLAG = SV.SS.FLAG THEN RETURN

          IF SS.FLAG THEN
             PRINT @(29,19):BLINK$:'ell Stock':NORM$:
          END ELSE
             PRINT @(29,19):'ell Stock':
          END
          SV.SS.FLAG = SS.FLAG

          RETURN
*-------------------------------------------------------------------------*
DISP.DATES: * Displays the Check-In and Check-Out Dates
          GOSUB UPD.CHK.PRT
          PRINT @(33,17):CHKOUT          "L#16"
          PRINT @(50,17):TIME.ZONE$      "L#3"
          PRINT @(54,17):CHKIN           "L#16"
          PRINT @(71,17):TIME.ZONE$      "L#3"
          RETURN
*-------------------------------------------------------------------------*
DISP.LNS: LN.CT = DCOUNT(LDID.LIST,VM)
          SLINE = LINE

          FOR LINE = 1 TO LN.CT
             LDID = LDID.LIST<1,LINE>
             LD.GET LDID
             GOSUB GET.LINE
             IF NUM(LD(1)) AND LD(1) # "" THEN
                GET.ALL.PRD SHP.BR,LD(1),QSIGN,GROUP
             END
             GOSUB DISP.LN
          NEXT LINE

          IF NOT(INIT.DISP) THEN
             LINE = SLINE
             GOSUB GET.LINE
          END
          RETURN
*-------------------------------------------------------------------------*
DISP.VIEW: * Display the correct view heading
          BEGIN CASE
          CASE VIEW = 4
*** Insert new view logic here.
          CASE VIEW = 3

             VIEW.HDG = "RCRental RateCheckIn ":TIME.ZONE$ "L#3":"Return Status ":TIME.ZONE$ "L#3":""
             VIEW.FTR = "Check-In"
          CASE VIEW = 2
             VIEW.HDG = "RCRental RateCheckIn ":TIME.ZONE$ "L#3":"UnitsExt Price"
             VIEW.FTR = "Check-In"
          CASE OTHERWISE
             VIEW.HDG = "RCRental RateCheck Out ":TIME.ZONE$ "L#3":"Check In ":TIME.ZONE$ "L#3":""
             VIEW.FTR = "Check-In"
          END CASE
          PRINT @(33,5):VIEW.HDG
          PRINT @(48,16):VIEW.FTR
          GOSUB CLR.VIEW
          GOSUB DISP.LNS
          RETURN
*-------------------------------------------------------------------------*
CLR.VIEW: * Clear the old view off
          VCLR -1
          DLN.CT = DCOUNT(DLINE.XREF<1>,VM)
          IF DLN.CT < 11 THEN DLN.CT = 11

          FOR LN = 1 TO DLN.CT
          BEGIN CASE
          CASE VIEW = 3
             VPRINT 47,LN,SPACE(11):"":SPACE(18)
          CASE VIEW = 2
             VPRINT 47,LN,SPACE(11):"":SPACE(7):"":SPACE(11)
          CASE OTHERWISE
             VPRINT 47,LN,SPACE(15):"":SPACE(15)
          END CASE
          NEXT LN

          RETURN
*-------------------------------------------------------------------------*
GET.LINE: * Initialize variables for the line item
          LDID = LDID.LIST<1,LINE>
          IF LDID#'' THEN
             GOSUB CLOSE.DF
             LD.GET LDID
          END ELSE MAT LD=''
          MAT OLD.LD = MAT LD
          QO      = LD(4)
          PN      = LD(1)
          IF NUM(PN) AND PN#"" THEN
             GET.ALL.PRD SHP.BR,PN,QSIGN,GROUP
             VALID.ITEM = YES
             RRATE    = ICONV(OCONV(LD(8)<1>,'MR9'),"MR3")
             IF LD(9)<1> = "" THEN
                ROVRD = " "
             END ELSE
                ROVRD = "*"
             END

             LDT.IN    = LD(13)<1,1>
             LTM.IN    = LD(13)<1,2>
             LDT.OUT   = LD(14)<1,1>
             LTM.OUT   = LD(14)<1,2>
             LCHK.IN   = OCONV(LDT.IN,'D2/'):' ':OCONV(LTM.IN,'MTH')
             LCHK.OUT  = OCONV(LDT.OUT,'D2/'):' ':OCONV(LTM.OUT,'MTH')
             TPRD15   = PRD(15)
             PRD(15)  = ""
             RPERIOD  = LD(84)<1,1>
             IQ.TO.ALPHA UM.TBL,UM.QTY,LD(23),QO,,,,,QO.ALPHA
             PRD(15)  = TPRD15
             GOSUB DISP.DF
             GOSUB DISP.HAZ
          END ELSE
             ROVRD = ""; QO.ALPHA = ""; VALID.ITEM = NO; MAT PRD = ""
             RRATE = ""; LCHK.IN  = ""; LCHK.OUT   = ""; RPERIOD = ""
             LDT.IN = ""; LDT.OUT = ""; LTM.OUT    = ""; LTM.IN  = ""
          END
          LOCATE LINE IN DLINE.XREF<1> SETTING DLINE ELSE NULL
          VSCROLL.GET.VER DLINE,VER
          OE.DESC.GET RDESC,,"SOE"
          DESC = RDESC<1,1>
          RETURN
*-------------------------------------------------------------------------*
DISP.DF:  GOSUB CLOSE.DF
          IF SKIP.PRD.MSG THEN RETURN
          PMSG = ''
       OE.GET.REMINDER PRD(58),LED(2)<1,GEN,1>,LED(2)<1,GEN,2>,MODE,PMSG,PRD(132),PRD(133)

*** Display the oe reminder for the current line item.
          IF PMSG#'' THEN
             IF ENT.MSG.ON AND E.MESS.<WINDOW.LEVEL> THEN
                ENT.MSG.ON = NO
                WINDOW 20,3,40,1,3
                PRINT @(0,0):BELL:'Press <Enter> for Second Message : ':
IN.SECOND:      INP A,,,0
                WINDOW.CLOSE
                WINDOW.CHILD.CLOSE
                E.MESS.<WINDOW.LEVEL> = ''
             END
             ENT.MSG.ON = NO
             DCT  = DCOUNT(PMSG,VM)
             IF DCT > 3 THEN WSIZE = 3 ELSE WSIZE = DCT
             PLAY.TUNE "$PROD.REMINDER"
             WINDOW.CHILD 10,2,60,WSIZE,3
             PRINT @(30,1):"Product Reminder Message"
             *- If we have more than 3 lines display 3 at a time
             IF DCT > 3 THEN
                FOR J=1 TO DCT
                FOR K=1 TO 3
                PRINT @(10,K+1):PMSG<1,J>"L#60":
                  J += 1
                NEXT K
                *- No more lines
                IF J > DCT THEN
                   PRINT @(25,5):'':
                *- More Lines
                END ELSE
                   PRINT @(25,5):BELL:REV$:'Press <Enter> for Next Reminder : ':NORM$
IN$$1:             INP A,,,0
                END
                *- Take one away from J as it is about increment
                J -= 1
                NEXT J
             END ELSE
                FOR J=1 TO DCT; PRINT @(10,J+1):PMSG<1,J>"L#60":; NEXT J
             END
             DONT.FORGET = YES
          END

          RETURN
*-------------------------------------------------------------------------*
DISP.HAZ:
          IF SKIP.PRD.MSG THEN RETURN
          HDATA = PRD(80)
          IF HDATA<1,1> = '' AND HDATA<1,2> = '' THEN RETURN
          BEGIN CASE
          CASE TRIM(HDATA<1,2>) = ''
             HMSG = TRIM(HDATA<1,1>)
          CASE TRIM(HDATA<1,1>) = ''
             HMSG = TRIM(HDATA<1,2>)
          CASE OTHERWISE
             HMSG = TRIM(HDATA<1,1>):' - ':TRIM(HDATA<1,2>)
          END CASE

          HWID = LEN(HMSG) + 2
          IF HWID < 30 THEN HWID = 32

          HOR  = 40 - (HWID / 2)
          VER  = 12
          HLEN = 2

          IF (ENT.MSG.ON AND E.MESS.<WINDOW.LEVEL>) OR DONT.FORGET THEN
             ENT.MSG.ON  = NO
             DONT.FORGET = NO
             E.MESS.<WINDOW.LEVEL> = ''
             WINDOW 20,9,40,1,3
             PRINT @(0,0):BELL:'Press <Enter> for Second Message : ':
IN.NMSG:     INP A,,,0
             WINDOW.CLOSE
             WINDOW.CHILD.CLOSE
          END

          ENT.MSG.ON = YES
          E.MESS.<WINDOW.LEVEL> = 1

          WINDOW.CHILD 17,2,46,1,3
          PRD.TITLE = 'Hazardous Material Information'
          PRINT @(25,1):PRD.TITLE
          PRINT @(17,2):HMSG

          RETURN
*-------------------------------------------------------------------------*
CLOSE.DF: IF DONT.FORGET THEN
             WINDOW.CHILD.CLOSE
             E.MESS.<WINDOW.LEVEL> = ''
             DONT.FORGET = NO
             END
          RETURN
*-------------------------------------------------------------------------*
DISP.LN:  *  Display each product information
          DLN = DLINE
          OE.DESC.GET RDESC,,"SOE"
          DCT = DCOUNT(RDESC,VM)
          IF DCT < 1 THEN DCT = 1
          RRATE    = ICONV(OCONV(LD(8)<1>,'MR9'),"MR3")
          IF LD(9)<1> = "" THEN
             ROVRD = ""
          END ELSE
             ROVRD = "*"
          END
          LDT.IN   = LD(13)<1,1>
          LTM.IN   = LD(13)<1,2>
          LDT.OUT  = LD(14)<1,1>
          LTM.OUT  = LD(14)<1,2>
          LCHK.IN  = OCONV(LDT.IN,'D2/'):' ':OCONV(LTM.IN,'MTH')
          LCHK.OUT = OCONV(LDT.OUT,'D2/'):' ':OCONV(LTM.OUT,'MTH')
          TPRD15   = PRD(15)
          QO       = LD(4)*QSIGN

          RPERIOD  = LD(84)<1,1>

          DLINE.XREF<1,DLINE> = LINE

          VPRINT  0,DLINE,RDESC<1,1>          "L#31"
          VPRINT 32,DLINE,RPERIOD             "L#2"
          VPRINT 35,DLINE,OCONV(RRATE,'MR3')  "R#10":ROVRD
          BEGIN CASE
          CASE VIEW = 3
             NCHK.IN   = OCONV(LDT.IN,'D0/'):' ':OCONV(LTM.IN,'MT')
             RPOS = LD(46)
             RENT.STAT = RSTATS<1,RPOS>

             VPRINT 47,DLINE,NCHK.IN             "L#11"
             VPRINT 59,DLINE,RENT.STAT           "L#18"
          CASE VIEW = 2
             IF LD(9)<1> # "" THEN
                OVRD.AMT = ICONV(OCONV(LD(8)<1>,'MR9'),"MR3")
             END ELSE
                OVRD.AMT = ""
             END
             RENTAL.CALC.AMT ROID,LED(28)<1,GEN>,LD(1),TOTAL,LDT.OUT,LTM.OUT,LDT.IN,LTM.IN,XINFO,,RPERIOD,LED(22)<1,GEN>,OVRD.AMT
             NCHK.IN  = OCONV(LDT.IN,'D0/'):' ':OCONV(LTM.IN,'MT')
             UCT   = DCOUNT(XINFO<1>,VM)
             UNITS = ""
             FOR ULN = 1 TO UCT
             UNITS = UNITS:XINFO<1,ULN>:XINFO<2,ULN>:" "
             NEXT ULN

             VPRINT 47,DLINE,NCHK.IN             "L#11"
             VPRINT 59,DLINE,UNITS               "L#7"
             VPRINT 67,DLINE,OCONV(TOTAL,'MR9')  "R2#11"
          CASE OTHERWISE
             VPRINT 47,DLINE,LCHK.OUT            "L#15"
             VPRINT 63,DLINE,LCHK.IN             "L#15"
          END CASE
*** Display extra description/comment lines.
          FOR XLN = 2 TO DCT
          DLINE += 1
          IF DLINE.XREF<1,DLINE>#'' AND DLINE.XREF<1,DLINE>#LINE THEN
             VINS DLINE
             DLINE.XREF = INSERT(DLINE.XREF,1,DLINE;LINE)
          END ELSE
             DLINE.XREF<1,DLINE> = LINE
          END
          VPRINT 0,DLINE,RDESC<1,XLN> "L#31"
          NEXT XLN

*** Remove any extra lines for this item.
          DLINE = DLINE+1
          LOOP
          IF DLINE.XREF<1,DLINE>=LINE THEN
             VDEL DLINE
             DLINE.XREF = DELETE(DLINE.XREF,1,DLINE)
          END ELSE EXIT
          REPEAT
          IF NOT(INIT.DISP) THEN
             DLINE = DLN
          END
          RETURN
*-------------------------------------------------------------------------*
CHK.AVAIL:   * Make sure the change in period will not effect the avail
          AVAIL.OK = YES
          IF NOT(NUM(LD(1))) OR LD(1) = "" THEN RETURN
          IF CHK.DT = '' THEN
             IF LD(14) # "" THEN
                CHK.DT = LD(14)<1,1>:'.':LD(14)<1,2>
             END ELSE
                CHK.DT = LED(9)<1,GEN,1>:'.':LED(9)<1,GEN,2>
             END
          END
          IF RET.DT = '' THEN
             IF LD(13) # "" THEN
                RET.DT = LD(13)<1,1>:'.':LD(13)<1,2>
             END ELSE
                RET.DT = LED(10)<1,GEN,1>:'.':LED(10)<1,GEN,2>
             END
          END

          RENTAL.AVAIL.GET AVAIL,LD(1),LED(2)<1,GEN,2>,CHK.DT,RET.DT,ROID,LDID

          IF AVAIL < 1 THEN AVAIL.OK = NO
          RETURN
*-------------------------------------------------------------------------*
DISP.IN.OUT: * Retrieve and display CHKIN and CHKOUT from LED
          CHKIN  = OCONV(LED(10)<1,GEN,1>,'D2/'):' ':OCONV(LED(10)<1,GEN,2>,'MTH')
          CHKOUT = OCONV(LED(9)<1,GEN,1>,'D2/'):' ':OCONV(LED(9)<1,GEN,2>,'MTH')
          PRINT @(33,17):CHKOUT        "L#16"
          PRINT @(50,17):TIME.ZONE$    "L#3"
          PRINT @(54,17):CHKIN         "L#16"
          PRINT @(71,17):TIME.ZONE$    "L#3"

          RETURN
*------------------------------------------------------------------------*
IN.OUT.ERR:  * Error message for chk in before check out
          MSG = BELL:"Item check in cannot be before it's checked out!"
          ERR.MESS 18,3,MSG
          RETURN
*-------------------------------------------------------------------------*
WDAY.ERR: *** An error message that an entered date is not a workday.
          MSG = BELL:"The Date Entered is not a Business Day!"
          ERR.MESS 18,3,MSG
          RETURN
*-------------------------------------------------------------------------*
WORKDAY:  *** Check the current date to see if it falls on a workday.
          SV.CHK.DAY = CHK.DAY
          IS.WDAY    = YES
          GET.NEXT.WORKDAY SV.CHK.DAY,CHK.DAY,,,YES

          IF CHK.DAY # SV.CHK.DAY THEN IS.WDAY = NO

          RETURN
*-------------------------------------------------------------------------*
GET.PN:   ERR = NO

          OE.GET.PN ROID,GEN,PRC.BR,PN,LDID,QSIGN,GROUP
          IF ERR THEN
             IF VALID.ITEM THEN GOSUB DISP.LN
             RETURN
          END
          GOSUB DISP.DF
          GOSUB DISP.HAZ
          IF LDID='' THEN
             OE.NEW.LDID ROID,LDID,LDID.LIST,LINE
          END
          LD(4)        = -1
          LD(5)<1,GEN> = LD(4)
          IF LD(13) = "" THEN
             LD(13) = LED(10)<1,GEN,1>:VM:LED(10)<1,GEN,2>
          END
          IF LD(14) = "" THEN
             LD(14) = LED(9)<1,GEN,1>:VM:LED(9)<1,GEN,2>
          END

*** Make sure that this items actaully available.
          GOSUB CHK.AVAIL
          IF NOT(AVAIL.OK) THEN
             PMPT = "You are about to use an item that is not available to rent. Continue (Y/N) : "
             USE.IT  = 'N'
             SV.QUIT = QUIT
             SV.F12  = F12
IN.NO.AVAIL: INP.PROMPT USE.IT,PMPT,'YN',1
             IF NOT(USE.IT) OR QUIT THEN
                ERR = YES
             END
             QUIT = SV.QUIT
             F12  = SV.F12
             IF ERR THEN PRINT BELL:; RETURN
          END

          VALID.ITEM = YES

          LD(46) = DFLT.RET

          FORCE.FIND = YES
          GOSUB PRC.ITEM
          GOSUB UPD.LINE

          IF ERR THEN PRINT BELL:; RETURN
          GOSUB DISP.LN
          *** When adding an item, only need to turn on the hotkey.
          IF NOT(SS.FLAG) THEN GOSUB EVAL.SS

          RETURN
*-------------------------------------------------------------------------*
PRC.ITEM: GOSUB CALC.RCD
          RENTAL.PRC.ITEM ROID,GEN,LDID,LED(22)<1,GEN>,PRC.ERR,FORCE.FIND
          RETURN
*-------------------------------------------------------------------------*
CALC.RCD: * Calculate the default rate code based on the period entered
          IF LD(84)<1,1> = "" THEN
             SDT = LD(14)<1,1>
             STM = LD(14)<1,2>
             EDT = LD(13)<1,1>
             ETM = LD(13)<1,2>

             GET.NUM.WORKDAYS SDT,EDT,YES,,YES,DAYS
             MINS = INT((ETM - STM) / 60)

             IF MINS < 0 THEN
                DAYS -= 1
*** Return time is earlier than exit time so take one from the day recalc
                MINS = (60*24) + MINS
             END
             IF DAYS < 0 THEN DAYS = 0

*** Total minutes and days.
             MINS = MINS + (HRS.DAY * DAYS * 60)
             LOCATE MINS IN RCODES<2> BY 'AR' SETTING MPOS ELSE MPOS -= 1
             IF MPOS < 1 THEN MPOS = 1
             LD(84) = RCODES<1,MPOS>
          END
          RETURN
*-------------------------------------------------------------------------*
UPD.LINE: * Update the current detail item
          RENTAL.UPD.LD ROID,GEN,LDID,LDID.LIST,UPD.DATA
          RETURN
*-------------------------------------------------------------------------*
EXIT.LNS: * Update the ledger record
          GOSUB CLOSE.DF
          IF BODY.VIEW.ONLY THEN GOTO IN.STAT
          IF F12 THEN
             BEGIN CASE
             CASE NEW.ORDER
                RENTAL.DELETE.ORDER ROID,GEN
                IF LED(1)<1,GEN> = '' THEN
                   USER.LOG.HISTORY '9',ROID,YES
                   GOTO RESTART
                END ELSE
                   BEGIN CASE
                   CASE DATE.OUT = ''
                      GOTO IN.DOUT
                   CASE TIME.OUT = ''
                      GOTO IN.TOUT
                   CASE OTHERWISE
                      GOTO IN.PN
                   END CASE
                END
             CASE UPD.DATA
                MSG = "Changes Have been made. Cannot abort."
                ANS = ''
IN.NO.ABORT:    INP.PROMPT ANS,BELL:MSG,,0
                GOTO INBODY
             CASE OTHERWISE
                GOTO UNLOCK.LED
             END CASE
          END ELSE
             IF LED(49) = "" AND NEW.ORDER THEN
                RENTAL.DELETE.ORDER ROID,GEN
                IF LED(1)<1,GEN> = '' THEN
                   USER.LOG.HISTORY '9',ROID,YES
                   GOTO RESTART
                END ELSE
                   BEGIN CASE
                   CASE DATE.OUT = ''
                      GOTO IN.DOUT
                   CASE TIME.OUT = ''
                      GOTO IN.TOUT
                   CASE OTHERWISE
                      GOTO IN.PN
                   END CASE
                END
             END
          END
          IF (LED(10)<1,GEN,1>+0) = 0 OR (LED(10)<1,GEN,2> = '') THEN
             MSG = "Check in date/time must be specified!!"
             ERR.MESS 20,3,MSG
             GOTO IN.DIN
          END
          RENTAL.UPD.LED ROID,GEN
          RENTAL.DEL.NULL.GENS ROID,GEN

          IF (NEW.ORDER AND VERF.SHIP.ADDR$ AND NOT(BODY.VIEW.ONLY)) THEN
             RENTAL.OE.HEADER ROID,GEN,BODY.VIEW.ONLY,'Status'
          END ELSE
             IF LED(6)<1,GEN> # 'B' AND LED(6)<1,GEN> # 'X' THEN
                GOSUB CHK.PO
             END
          END

IN.STAT:  RENTAL.OE.STATUS ROID,GEN,NEW.ORDER,,VIEW.ONLY
          IF ROID # '' AND MOVE = 2 THEN
             GOSUB UPD.LD.LIST
             GOSUB REDISPLAY
             LINE=1; DLINE=1; QUIT=0; MOVE=0; LASTKEY=0
             GOTO MOVENEXT
          END
          IF ROID = '' THEN GOTO RESTART

UNLOCK.LED:  *
          IF LOCKED.LED THEN
             RENTAL.UNLOCK.LED ROID
          END
          IF ROID THEN
             USER.LOG.HISTORY '9',ROID
          END
          IF NOT(INIT.ROID) THEN
             GOTO RESTART
          END
          GOTO FINISH
*-------------------------------------------------------------------------*
CHK.PO:   * Check PO Number and Release Number
          IF LED(6)<1,GEN> # 'B' AND LED(6)<1,GEN> # 'X' THEN
             PO.CHK  = (CUSS(45)<1,1>#'' AND CUSS(45)<1,1>#'R' AND CUSS(45)<1,1>#0 AND CUSS(45)<1,1>#'N' AND LED(13)<1,GEN>='')
             REL.CHK = (CUSS(45)<1,1>='R' OR CUSS(45)<1,1>='B' AND LED(65)<1,GEN>='')
             IF (PO.CHK OR REL.CHK) AND NOT(BODY.VIEW.ONLY) THEN
                RENTAL.OE.HEADER ROID,GEN,BODY.VIEW.ONLY,'Status'
             END
          END
          RETURN
*-------------------------------------------------------------------------*
FINISH:   WINDOW.CLOSE
          RETURN
!TSMITH~11/19/14~12:30
